﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FatusoAction;
using FatusoAction;
using FatusoAction.Model;
using System.Text.RegularExpressions;

namespace Fatuso
{
    public class Program
    {
        /* Fatuso v0.1
         * 
         * Este programa tem por objetivo automatizar tarefas repetitivas e que 
         * consomem um tempo desnecessário. Os dados e informações das tarefas
         * serão salvos em arquivos XML. São elas:
         * 
         * 1) Download de Torrents de Séries
         * 2) Download de Legendas de Séries
         * 3) Download de Torrents de Filmes
         * 4) Download de Legendas de Filmes
         * 5) Download de Vídeos do Youtube
         * 6) Download de Animes do Anitube
         * 7) Verificação de Estabilidade do Computador (Espaço em Disco, etc)
         * 8) Conversão de HQs para Kindle 3 e 4
         * 9) Criação e Conversão de Ebooks e Páginas de Ebooks (MOBI, EPUB)
         * 10) Automatização de Envio de E-mail ou SMS (Calendar)
         * 11) Automatização de Divulgação dos Textos do Faws
         * 12) Caronas Unicaronas
         * 
         * Status do desenvolvimento
         * 
         * 1) Em Andamento - 50%
         * 2) Em Andamento - 50%
         * 3) Em Andamento - 50%
         * 4) Em Andamento - 50%
         * 5) Não Iniciado - 0%
         * 6) Não Iniciado - 0%
         * 7) Não Iniciado - 0%
         * 8) Não Iniciado - 0%
         * 9) Não Iniciado - 0%
         * 10) Não Iniciado - 0%
         * 11) Não Iniciado - 0%
         * 12) Em Andamento - 0%
         * 
         * Tarefas
         * 
         * 4) Download automatico por feed do EpisodeCalendar                           - 0%
         * 9) Inserção de página como parâmetro para as legendas                        - 0%
         * 11) Melhorar Comparação de Igualdade, para considerar episódio (FolderAction)- 0%
         * 13) Log Inteligente, decide o que mostrar na tela ou gravar em arquivo       - 0%
         * 
         */
        static void Main(string[] args)
        {
            string comandoCompleto = "";

            while (comandoCompleto.ToLower().Trim() != "sair")
            {
                try
                {
                    //Este console servirá para chamar as operações da Action via linha de comando
                    Console.Write("\nDigite o comando: ");
                    comandoCompleto = Console.ReadLine() + " ";

                    List<string> opcoesComando = new List<string>();
                    MatchCollection matches = Regex.Matches(comandoCompleto, @"-[a-zA-Z]+");
                    
                    if (matches.Count > 0)
                    {
                        foreach (Match match in matches)
                        {
                            opcoesComando.Add(match.Value.Replace("-", " ").ToUpper().Trim());
                            comandoCompleto = comandoCompleto.Replace(" " + match.Value + " ", " ");
                        }

                        while (comandoCompleto.IndexOf("  ") > 0)
                            comandoCompleto = comandoCompleto.Replace("  ", " ").Trim();
                    }

                    string comando = comandoCompleto.Split(' ').Count() > 0 ?
                        comandoCompleto.Split(' ')[0] : comandoCompleto;
                    Comando comandoPrincipal = (Comando)Enum.Parse(typeof(Comando), comando, true);
                    string parametros = comandoCompleto.Remove(0, comando.Length);

                    ProgramAction.ExecutarComando(comandoPrincipal, parametros.Trim(), opcoesComando);

                }
                catch (Exception ex)
                {
                    Console.WriteLine(">Erro: " + ex.Message);
                }

                Console.WriteLine("Operação Concluída.");

            }
        }
    }
}
